import request from '@/utils/request'
/**
 * 新闻来源枚举
 */
export enum NewsSource {
  ALL = 'all',
  OFFICIAL = 'official',
  MEDIA = 'media',
  OTHER = 'other'
}

/**
 * 新闻实体接口
 */
export interface News {
  id: string
  name: string           // 新闻名称
  summary: string        // 新闻简述
  source: NewsSource     // 新闻来源
  time: string          // 发布时间
  imageUrl: string      // 新闻图片
  browse: number      // 点击量
  good: number      // 点赞量
  url?: string      // 新闻文件链接
}

/**
 * 获取新闻列表请求参数
 */
export interface NewsQuery {
  page: number          // 当前页码
  size: number          // 每页数量
  name?: string         // 新闻名称（可选）
  source?: NewsSource   // 新闻来源（可选）
}

/**
 * 统一返回数据格式
 */
interface JsonData<T> {
  code: number
  data: T
  msg: string
}

interface NewsListResponse {
  current_data: News[]
  total_record: number
}

/**
 * 获取新闻列表
 * @param params 查询参数
 * @returns 新闻列表数据
 */
export const getNewsList = (params: NewsQuery) => {
  return request.post<any,NewsListResponse>('/api/news/list', params)
}

/**
 * 获取新闻详情
 */
export const getNewsDetail = (id: number) => {
  return request.get<JsonData<News>>(`/api/news/${id}`)
}

/**
 * 上传新闻图片
 * @param file 图片文件
 * @returns 上传后的文件信息
 */
export const uploadNewsImage = (file: File) => {
  const formData = new FormData()
  formData.append('file', file)
  return request.post<JsonData<string>>('/api/news/upload_img', formData)
}

/**
 * 上传新闻文件
 * @param file 文件
 * @returns 上传后的文件信息
 */
export const uploadNewsFile = (file: File) => {
  const formData = new FormData()
  formData.append('file', file)
  return request.post<JsonData<string>>('/api/news/upload_file', formData)
}

/**
 * 删除新闻文件
 * @param newsId 新闻ID
 */
export const deleteNewsFile = (newsId: number) => {
  return request.delete<JsonData<any>>(`/api/news/${newsId}/files`)
}

/**
 * 添加新闻
 */
export const addNews = (data: Partial<News>) => {
  return request.post<JsonData<News>>('/api/news/add', data)
}

/**
 * 更新新闻
 */
export const updateNews = (id: string, data: Partial<News>) => {
  return request.put<News>(`/api/news/${id}`, data)
}

/**
 * 删除新闻
 */
export const deleteNews = (id: string) => {
  return request.delete(`/api/news/${id}`)
}

/**
 * 批量删除新闻
 */
export const batchDeleteNews = (ids: string[]) => {
  return request.delete('/api/news/batch', { data: ids })
}

